package com.sen.Midium;

/**
 * The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this:
 * (you may want to display this pattern in a fixed font for better legibility)
 *
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * And then read line by line: "PAHNAPLSIIGYIR"
 *
 * Write the code that will take a string and make this conversion given a number of rows:
 *
 * string convert(string s, int numRows);
 *
 *
 * Example 1:
 * Input: s = "PAYPALISHIRING", numRows = 3
 * Output: "PAHNAPLSIIGYIR"
 *
 * Example 2:
 * Input: s = "PAYPALISHIRING", numRows = 4
 * Output: "PINALSIGYAHRPI"
 *
 * Explanation:
 * P     I    N
 * A   L S  I G
 * Y A   H R
 * P     I
 *
 *
 *
 *
 *
 */
public class L006_ZigZag_Conversion {
    public static String convert(String s, int numRows){
        StringBuilder[] sb = new StringBuilder[numRows];

        if(s == null || s.length() == 0) return s;

        for(int i = 0; i < numRows; i++){
            sb[i] = new StringBuilder();
        }
        int len = s.length();
        int index = 0;
        char[] c = s.toCharArray();
        while(index < len) {
            for (int i = 0; i < numRows && index < len; i++) {
                sb[i].append(c[index++]);
            }

            for (int i = numRows - 2; i > 0 && index < len; i--) {
                sb[i].append(c[index++]);
            }
        }

        for(int i = 1; i < numRows; i++){
            sb[0].append(sb[i]);
        }

        return sb[0].toString();

    }
}
